﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class CustomersNamesCollection : AbstractCollection
    {
        private static List<CustomerName> _list;

        /// <summary>
        /// Список всех имён
        /// </summary>
        public List<CustomerName> CustomersNamesList
        {
            get
            {
                if (_list == null)
                {
                    _list = new List<CustomerName>();

                    foreach (
                        v_FullCustomerDifinition item in
                            Entities.v_FullCustomerDifinition.OrderBy(c => c.SequentialNumber))
                    {
                        var custName = new CustomerName
                                           {
                                               Cities = item.SettlementNameRu,
                                               IdCustomer = item.IdCustomer,
                                               Manager = item.UserFullNameRu,
                                               Name = item.CustomerName,
                                               ProfineRegionNameLocalized = item.profineRegionRu,
                                               SequentialNumber = (int) item.SequentialNumber
                                           };

                        if (!_list.Contains(custName))
                            _list.Add(custName);

                        var custLEName = new CustomerName
                                             {
                                                 Cities = item.SettlementNameRu,
                                                 IdCustomer = item.IdCustomer,
                                                 Manager = item.UserFullNameRu,
                                                 Name = item.LegalEntityName,
                                                 ProfineRegionNameLocalized = item.profineRegionRu,
                                                 SequentialNumber = (int) item.SequentialNumber
                                             };

                        if (!_list.Contains(custLEName))
                            _list.Add(custLEName);
                    }
                }

                return _list;
            }
        }

        /// <summary>
        /// Получени списка имён клиента
        /// </summary>
        /// <param name="idcustomer">Идентификатор клиента</param>
        /// <returns>Список имён</returns>
        public List<CustomerName> GetNamesByIdCustomer(int idcustomer)
        {
            return CustomersNamesList.Where(c => c.IdCustomer == idcustomer).ToList();
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
        }

        #region Overrides of AbstractCollection

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(CustomersNamesList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (CustomerName);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            return null;
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return null;
        }

        #endregion
    }
}